Testing even simple commercial computer applications can be extremely complex because the number of independent code paths to be tested can be very large. Each of these code paths, in turn, is composed of a very large number of individual functions, which may be composed of one or more blocks of non-adjoining instructions that further complicate testing. There is a need in the computer industry for an approach that performs such complex testing in an efficient manner.